// 01_variables_and_mutability.rs
// 演示 Rust 中的变量和可变性概念

// 将原来的 main 函数改为公共的 run 函数
#[allow(dead_code)]
pub fn run() {
    // 1. 不可变变量（默认）
    // 在 Rust 中，变量默认是不可变的（immutable），这是 Rust 安全性的一个核心特性
    let x = 5;
    println!("x 的初始值是: {}", x);
    
    // 如果尝试修改不可变变量，将导致编译错误
    // x = 6; // 取消注释这行将会导致编译错误
    
    // 2. 可变变量
    // 使用 mut 关键字声明可变变量
    let mut y = 5;
    println!("y 的初始值是: {}", y);
    y = 6; // 这是允许的，因为 y 是可变的
    println!("y 修改后的值是: {}", y);
    
    // 3. 变量的类型标注
    // 可以显式指定变量的类型
    let z: i32 = 10;
    println!("z 的值（带类型标注）: {}", z);
    
    // 4. 变量遮蔽（Variable Shadowing）
    // 可以使用相同的名称声明新变量，新变量会遮蔽旧变量
    let a = 10;
    println!("a 的初始值: {}", a);
    
    let a = a + 5; // 这不是修改，而是创建了一个新的 a 变量
    println!("a 遮蔽后的值: {}", a);
    
    // 5. 常量（Constants）
    // 常量必须在声明时赋值，并且不能使用 mut
    // 常量的作用域可以是全局的
    const MAX_POINTS: u32 = 100_000;
    println!("常量 MAX_POINTS 的值: {}", MAX_POINTS);
    
    // 6. 整数的不同进制表示
    let decimal = 98_222; // 十进制
    let hex = 0xff; // 十六进制
    let octal = 0o77; // 八进制
    let binary = 0b1111_0000; // 二进制
    let byte = b'A'; // 字节字面量（仅限于 u8）
    
    println!("十进制: {}", decimal);
    println!("十六进制: {}", hex);
    println!("八进制: {}", octal);
    println!("二进制: {}", binary);
    println!("字节字面量: {}", byte);
}